//
//  redeotica.cpp
//  complexidade
//  http://br.spoj.pl/problems/REDOTICA
//  Created by Bruno Dias on 10/06/11.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;
#define MAX 101
int vizinho[MAX], lista[MAX];

struct Aresta {
    int origem, destino, peso;  
    Aresta(int o, int d, int p) {
        origem = o, destino = d, peso = p;
    }
    Aresta() {
    }
};

int ufind(int x) {
    if (vizinho[x] == x)
        return x;
    vizinho[x] = ufind(vizinho[x]);
    return vizinho[x];
}

bool compare(Aresta a, Aresta b) {
    return a.peso < b.peso;
} 

int main() {
    int n, m;  
    int caso = 0;

    while ((cin >> n >> m) && n != 0 && m != 0) {
        vector<Aresta> aresta;
        for (int i = 0; i < m; i++) {
            Aresta x;
            cin >> x.origem >> x.destino >> x.peso;
            aresta.push_back(x);
        }
        caso++;
        cout << "Teste " << caso << "\n";
        for (int i = 0; i <= n; i++) { 
            vizinho[i] = i;
            lista[i] = 0;
        }
        sort(aresta.begin(), aresta.end(), compare);
        for (int i = 0; n > 1 && i < aresta.size(); i++) {
            Aresta a = aresta[i];
            if (ufind(a.origem) != ufind(a.destino)) {
                if (lista[ufind(a.origem)] < lista[ufind(a.destino)]) {
                    vizinho[ufind(a.origem)] = ufind(a.destino);
                } 
                lista[ufind(a.origem)] = lista[ufind(a.origem)] + 1;
                vizinho[ufind(a.destino)] = ufind(a.origem);
                if (a.origem < a.destino) {
                    cout << a.origem << " ";
                } else
                    cout << a.destino << " ";
                if (a.destino < a.origem) {
                    cout << a.origem << " ";
                } else 
                    cout << a.destino << " ";
                cout << "\n";		
                n--;
            }
        }
        cout << "\n"; 
    }
}